﻿using System;
using System.Data;
using System.Text;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class AdmVentas : GenericPage
{
    #region Propiedades

    Usuarios usuario = new Usuarios();
    List<Talonarios> listaTalonarios = new List<Talonarios>();
    Talonarios talonario = new Talonarios();
    List<Impuestos> listaTasas = new List<Impuestos>();
    GC2.Funciones.General.FunctionsSite f = new GC2.Funciones.General.FunctionsSite();

    //protected List<VentasDet> listaVentasDet = new List<VentasDet>();
    private List<VentasDet> listaVentasDet
    {
        get
        {
            return (List<VentasDet>)Session["listaVentasDet"];
        }
        set
        {
            Session["listaVentasDet"] = value;
        }
    }

    private List<Cheques> listaCheques
    {
        get
        {
            return (List<Cheques>)Session["listaCheques"];
        }
        set
        {
            Session["listaCheques"] = value;
        }
    }

    private Cajas oCaja
    {
        get
        {
            return (Cajas)Session["oCaja"];
        }
        set
        {
            Session["oCaja"] = value;
        }
    }

    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];

                if (usuario.Login == "Compras")
                {
                    lblMensaje.Text = "Este usuario es para Compras";
                    mpeMensaje.Show();
                    return;
                }

                BMClientes bmClientes = new BMClientes(Connection);
                Clientes cliente = new Clientes();
                List<Clientes> listaClientes = new List<Clientes>();
                listaClientes = bmClientes.BMClientesSearch(cliente);
                Session["listaClientes"] = listaClientes;
                int iAccion = 1;
                Session["Cliente"] = null;
                if (!String.IsNullOrEmpty(Request.QueryString["Accion"]))
                {
                    iAccion = Convert.ToInt16(Request.QueryString["Accion"].ToString());
                    Session["Accion"] = iAccion;
                }
                if (Session["Accion"] != null)
                {
                    iAccion = Convert.ToInt16(Session["Accion"]);
                }
                else
                {
                    iAccion = 1;
                }
                if (iAccion == 2 && String.IsNullOrEmpty(Request.QueryString["Id_Ventas"]))
                {
                    iAccion = 1;
                }
                Session["Accion"] = iAccion;
                listaVentasDet = new List<VentasDet>();
                if (iAccion != 4)
                {
                    Session["listaVentasDet"] = listaVentasDet;
                }
                listaCheques = new List<Cheques>();
                Session["listaCheques"] = listaCheques;
                CargarTalonarios();
                CargarTasas();
                CargarComboVendedores();
                btnCobranza.Visible = false;
                trCobranza1.Visible = false;
                trCobranza2.Visible = false;
                if (iAccion == 1)
                {
                    NuevaVenta();
                    btnEliminar.Visible = false;
                    btnImprimir.Visible = false;
                   
                    txtCodBarra.Focus();
                }
                if (iAccion == 2)
                {
                    CargarVenta();
                    
                }
                if (iAccion == 3)
                {
                    if (String.IsNullOrEmpty(Request.QueryString["Id_Ventas"]))
                    {
                        iAccion = 1;
                        Session["Accion"] = iAccion;
                        NuevaVenta();
                        btnEliminar.Visible = false;
                        btnImprimir.Visible = false;

                        txtCodBarra.Focus();
                    }
                    else
                    {
                        CargarVenta();
                    }
                }
                if (iAccion == 4)  // Factura en base a Remito
                {
                    VerificaCaja();
                    btnEliminar.Visible = false;
                    btnImprimir.Visible = false;
                    if (Session["Remito"] != null)
                    {
                        Remitos remito = (Remitos)Session["Remito"];
                        if (remito.Tipo == "L")
                        {
                            hdnForma.Value = remito.Tipo;
                            DateTime dtHoy = DateTime.Now.Date;
                            string sFecha = dtHoy.ToString().Remove(11);
                            Fecha.SetFecha(Convert.ToDateTime(sFecha));
                        }
                        else
                        {
                            NuevaVenta();
                        }
                        CargarRemito();
                    }
                }
                
                // los siguientes atributos estan manejados de esta manera
                // porque asp.net a veces pierde los valores de los txtbox si la propiedad
                // ReadOnly = True en tiempo de diseño.
                txtIdArticulo.Attributes.Add("readonly", "readonly");
                txtArticulo.Attributes.Add("readonly", "readonly");
                txtStock.Attributes.Add("readonly", "readonly");
                txtLote.Attributes.Add("readonly", "readonly");
                txtCliente.Attributes.Add("readonly", "readonly");
                txtSaldo.Attributes.Add("readonly", "readonly");
                txtCodBarra.Attributes.Add("onkeydown", "if (event.keyCode==13) {event.keyCode=0; document.getElementById('" + btnCodBarra.ClientID + "').click();}");

                if (iAccion == 1)
                {
                    VerificaCaja();
                }
            }
            listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];            

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtIdCliente_TextChanged
    protected void txtIdCliente_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (chkProveedor.Checked)
            {
                BMProveedores bmProveedor = new BMProveedores(Connection);
                Proveedores proveedor = new Proveedores();
                proveedor.Id_Proveedor = Convert.ToInt64(txtIdCliente.Text);
                proveedor = bmProveedor.BMProveedoresGetOne(proveedor);
                txtIdCliente.Text = proveedor.Id_Proveedor.ToString();
                txtCliente.Text = proveedor.Nombre;
                txtSaldo.Text = proveedor.Saldo.ToString();

                Session["Proveedor"] = proveedor;
                chkProveedor.Enabled = false;
            }
            else
            {
                if (txtCliente.Text == "")
                {
                    txtCliente.Text = "";
                    txtIdCliente.Attributes.Add("readonly", "readonly");
                    BuscarCliente();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarCliente_Click
    protected void btnBuscarCliente_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            Session["Remitos"] = null;
            if (txtCodBarra.Text.Equals(""))
            {
                txtIdCliente.Text = "";
                txtCliente.Text = "";
                txtIdCliente.Attributes.Add("readonly", "readonly");
                cboTalon.Visible = true;
                Session["talonario"] = null;
                lblFormato.Text = "";
                txtPrefijo.Text = "";
                txtFactura.Text = "";
                BuscarCliente();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnLimpiar_Click
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            LimpiarItem();
            ActualizarTotalVenta();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/Default.aspx", false);
        }
    #endregion

    #region btnImprimir_Click
    protected void btnImprimir_Click(object sender, EventArgs e)
    {
        Ventas venta = (Ventas)Session["venta"];
        Clientes cliente = new Clientes();
        cliente.Id_Cliente = venta.Id_Cliente;
        BMClientes bmClientes = new BMClientes(Connection);
        cliente = bmClientes.BMClientesGetOne(cliente);
        venta.FDatosCliente = cliente.DatosFactura;
        string sTemp = venta.Prefijo;
        sTemp += venta.Factura;
        venta.FFactura = sTemp;
        int iReporte = 0; 
        if (lblFormato.Text == "A")
        {
            string sMascara = Mascaras("A");
            if (sMascara == "")
            {
                lblMensaje.Text = "Falta formato de impresión tipo A, avise a soporte.";
                mpeMensaje.Show();
                return;
            }
            iReporte = 1;
        }
        if (lblFormato.Text == "B")
        {
            string sMascara = Mascaras("B");
            if (sMascara == "")
            {
                lblMensaje.Text = "Falta formato de impresión tipo B, avise a soporte.";
                mpeMensaje.Show();
                return;
            }
            iReporte = 2;
        }
        if (lblFormato.Text == "C")
        {
            string sMascara = Mascaras("C");
            if (sMascara == "")
            {
                lblMensaje.Text = "Falta formato de impresión tipo C, avise a soporte.";
                mpeMensaje.Show();
                return;
            }
            iReporte = 3;
        }
        if (iReporte == 0)
        {
            lblMensaje.Text = "Formato de impresión no previsto, avise a soporte.";
            mpeMensaje.Show();
            return;
        }
        
        Session["iReporte"] = iReporte.ToString(); //  1 Factura A  -  2  Factura B  -  3  Factura C   - 1 NCRed A - 2 NCred B
        registrarScript();
    }
    #endregion

    #region btnGuardar_Click
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            Decimal dCheques = 0;
            if (txtCheques.Text != "")
            {
                dCheques = Convert.ToDecimal(txtCheques.Text.Trim());
            }
            Decimal dPago = 0;
            if (txtPago.Text != "")
            {
                dPago = Convert.ToDecimal(txtPago.Text.Trim());
            }
            Decimal dCtaCte = 0;
            if(txtCtaCte.Text != "")
            {
                dCtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
            }
            Decimal dTotal = 0;
            if (txtTotal.Text != "")
            {
                dTotal = Convert.ToDecimal(txtTotal.Text.Trim());
            }
            Decimal dTemp = dPago + dCtaCte + dCheques;
            if (dTotal == dTemp)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (txtIdCliente.Text != "")
                {
                    if (txtTotal.Text != "" && dTotal > 0)
                    {
                        if (iAccion == 1)
                        {
                            Guardar();
                            btnImprimir.Visible = true;
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "No puede Guardar una Venta con Importe Cero.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Falta seleccionar Cliente";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "La suma de Pago, CtaCte y Cheques no conforman el Total";
                mpeMensaje.Show();
            }


        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnNuevaVenta_Click
    protected void btnNuevaVenta_Click(object sender, EventArgs e)
    {
        try
        {
            NuevaVenta();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtPago_TextChanged
    protected void txtPago_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtTotal.Text == "")
            {
                txtPago.Text = "";
                lblMensaje.Text = "Falta agregar items.";
                mpeMensaje.Show();
                return;
            }
            if (txtPago.Text != "")
            {
                Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
                Decimal dPago = Convert.ToDecimal(txtPago.Text.Trim());
                Decimal dCheques = Convert.ToDecimal(txtCheques.Text.Trim());
                if (dPago > dTotal)
                {
                    lblMensaje.Text = "Importe de Pago Incorrecto.";
                    mpeMensaje.Show();
                    return;
                }
                if (dCheques > dTotal)
                {
                    lblMensaje.Text = "Importe de Cheques Incorrecto.";
                    mpeMensaje.Show();
                    return;
                }
                Decimal dSuma1 = dPago + dCheques;
                if (dSuma1 > dTotal)
                {
                    lblMensaje.Text = "La suma de Cheques y Pago es mayor que el Total.";
                    mpeMensaje.Show();
                    return;
                }
                Decimal dSaldo = dTotal - dSuma1;
                if (dSaldo > 0)
                {
                    txtCtaCte.Text = Convert.ToDecimal(dSaldo).ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtCtaCte_TextChanged
    protected void txtCtaCte_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtTotal.Text == "")
            {
                txtCtaCte.Text = "";
                lblMensaje.Text = "Falta agregar items.";
                mpeMensaje.Show();
                return;
            }
            if (txtCtaCte.Text != "")
            {
                Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
                Decimal dCtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
                Decimal dCheques = Convert.ToDecimal(txtCheques.Text.Trim());
                if (dCtaCte > dTotal)
                {
                    lblMensaje.Text = "Importe de Cta.Cte. Incorrecto.";
                    mpeMensaje.Show();
                    return;
                }
                if (dCheques > dTotal)
                {
                    lblMensaje.Text = "Importe de Cheques Incorrecto.";
                    mpeMensaje.Show();
                    return;
                }
                Decimal dSuma1 = dCtaCte + dCheques;
                if (dSuma1 > dTotal)
                {
                    lblMensaje.Text = "La suma de Cheques y CtaCte. es mayor que el Total.";
                    mpeMensaje.Show();
                    return;
                }
                Decimal dSaldo = dTotal - dSuma1;
                if (dSaldo > 0)
                {
                    txtPago.Text = Convert.ToDecimal(dSaldo).ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarArticulo_Click
    protected void btnBuscarArticulo_Click(object sender, EventArgs e)
    {
        try
        {
            BuscarArticulo();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvVentasDet_PageIndexChanging
    protected void gvVentasDet_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvVentasDet.PageIndex = e.NewPageIndex;
            gridDataBaund();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvVentasDet_RowDeleting
    protected void gvVentasDet_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            VentasDet ventasDet = new VentasDet();
            ventasDet.Item = listaVentasDet[e.RowIndex].Item;
            List<VentasDet> listaTemp = listaVentasDet;
            listaVentasDet = new List<VentasDet>();
            foreach (VentasDet item in listaTemp)
            {
                if (item.Item != ventasDet.Item)
                {
                    listaVentasDet.Add(item);
                }
            }
            Session["listaVentasDet"] = listaVentasDet;
            ActualizarGrilla();
            ActualizarTotalVenta();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvVentasDet_RowDataBound
    protected void gvVentasDet_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                if (lblFormato.Text != "A")
                {
                    e.Row.Cells[7].Visible = false;
                    e.Row.Cells[8].Visible = false;
                }
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (iAccion == 3)
                {
                    e.Row.Cells[10].Visible = false;
                }
                if (Session["Remito"] != null)
                {
                    e.Row.Cells[10].Visible = false;
                }
                if (lblFormato.Text != "A")
                {
                    e.Row.Cells[7].Visible = false;
                    e.Row.Cells[8].Visible = false;
                }
            }
           
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtCantidad_TextChanged
    protected void txtCantidad_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtCantidad.Text != "" && txtPrecio.Text != "")
            {
                Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                if (dCantidad > 0)
                {
                    Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                    Decimal dItem = dCantidad * dPrecio;
                    dItem = Math.Round(dItem, 2);
                    txtTotalItem.Text = dItem.ToString();
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtPrecio_TextChanged
    protected void txtPrecio_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtCantidad.Text != "" && txtPrecio.Text != "")
            {
                Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                if (dCantidad > 0)
                {
                    Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                    Decimal dItem = dCantidad * dPrecio;
                    dItem = Math.Round(dItem, 2);
                    txtTotalItem.Text = dItem.ToString();
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnAgregar_Click
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        try
        {
            if (Session["Cliente"] == null)
            {
                ControlTalonario();
            }
            if (f.isNumeric(txtTotalItem.Text))
            {
                Decimal dTotalItem = Convert.ToDecimal(txtTotalItem.Text);
                if (dTotalItem != 0)
                {
                    if (f.isNumeric(txtIdArticulo.Text))
                    {
                        AgregarItem();
                    }
                    else
                    {
                        lblMensaje.Text = "Debe seleccionar Artículo.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnEliminar_Click
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Eliminar();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCodBarra_Click
    protected void btnCodBarra_Click(object sender, EventArgs e)
    {
        if (Session["Cliente"] == null)
        {
            ControlTalonario();
        }
        if (!txtCodBarra.Text.Equals(""))
        {
            //codigo de barras, ej.: 123456 esta en la base
            AgregaCodigoBarras();
        }
    }
    #endregion

    #region cboTalon_SelectedIndexChanged
    protected void cboTalon_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            ControlTalonario();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtFactura_TextChanged
    protected void txtFactura_TextChanged(object sender, EventArgs e)
    {
        {
            try
            {
                Int32 iNumero = Convert.ToInt32(txtFactura.Text.Trim());
            }
            catch (Exception ex) 
            {
                txtFactura.Text = "";
                lblMensaje.Text = ex.Message;
                mpeMensaje.Show();
                return;
            } 
            bool ok = ControlFactura();
            if (!ok)
            {
                txtFactura.Text = "";
            }
            else
            {
                txtFactura.ReadOnly = true;
                cboTalon.Enabled = false;
            }
            txtCodBarra.Focus();
        }
    }
    #endregion

    #region cboTasas_SelectedIndexChanged
    protected void cboTasas_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int iTasa = int.Parse(cboTasas.SelectedItem.Value);
            listaTasas = (List<Impuestos>)Session["listaTasas"];
            foreach (Impuestos item in listaTasas)
            {
                if (iTasa == item.Id)
                {
                    decimal dTasa = decimal.Parse(item.Tasa.ToString());
                    txtTasa.Text = dTasa.ToString();
                }
            }
            txtCodBarra.Focus();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCobranza_Click
    protected void btnCobranza_Click(object sender, EventArgs e)
    {
        Session["Cobranza"] = "Cobranza";
        Response.Redirect("~/Clientes/Cobranza.aspx", false);
    }
    #endregion

    #region gvCobranzas_PageIndexChanging
    protected void gvCobranzas_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvCobranzas.PageIndex = e.NewPageIndex;
            gridDataBaundCobranzas();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnAgregarCheque_Click
    protected void btnAgregarCheque_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtBanco.Text == "")
            {
                lblMensaje.Text = "Falta Nombre del Banco.";
                mpeMensaje.Show();
                return;
            }

            if (f.isNumeric(txtCodBanco.Text))
            {
                if (f.isNumeric(txtMontoCheque.Text))
                {
                    Decimal dMonto = Convert.ToDecimal(txtMontoCheque.Text);
                    if (dMonto > 0)
                    {
                        AgregarCheque();
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Monto del Cheque.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Monto del Cheque Incorrecto.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "El Código de Banco es un número de hasta 3 cifras ej: 20.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvCheques_RowDeleting
    protected void gvCheques_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            Cheques cheque = new Cheques();
            cheque.Item = listaCheques[e.RowIndex].Item;
            List<Cheques> listaTemp = listaCheques;
            listaCheques = new List<Cheques>();
            foreach (Cheques item in listaTemp)
            {
                if (item.Item != cheque.Item)
                {
                    listaCheques.Add(item);
                }
            }
            Session["listaCheques"] = listaCheques;
            ActualizarGrillaCheques();
            ActualizarTotalCheques();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvCheques_PageIndexChanging
    protected void gvCheques_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvCheques.PageIndex = e.NewPageIndex;
            gridDataBaundCheques();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvCheques_RowDataBound
    protected void gvCheques_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (iAccion > 1 && iAccion < 4)
                {
                    e.Row.Cells[7].Enabled = false;
                }
                else
                {
                    e.Row.Cells[7].Enabled = true;
                }
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region chkSS_CheckedChanged
    protected void chkSS_CheckedChanged(object sender, EventArgs e)
    {
        if (chkSS.Checked)
        {
            btnBuscarArticulo.Enabled = false;
            trCodBarra.Visible = false;
            txtIdArticulo.Text = "0";
            lblAccion.Text = "Ventas Sin Stock";
            txtArticulo.Attributes.Clear();
            //txtArticulo.Attributes.Add("readonly", "");
            txtLote.Enabled = false;
            SubRubros subRubro = new SubRubros();
            subRubro.SubRubro = "Sin Stock";
            subRubro.Rubro = "Ventas";
            Session["SubRubro"] = subRubro;
            txtStock.Text = "0";
        }
        else
        {
            btnBuscarArticulo.Enabled = true;
            trCodBarra.Visible = true;
            txtIdArticulo.Text = "";
            lblAccion.Text = "Cargar Ventas";
            txtArticulo.Attributes.Clear();
            txtArticulo.Attributes.Add("readonly", "readonly");
            txtLote.Enabled = true;
        }
    }
    #endregion

    #endregion

    #region Métodos

    #region BuscarCliente
    public void BuscarCliente()
    {
        try
        {
            List<Clientes> listaClientes = new List<Clientes>();
            listaClientes = (List<Clientes>)Session["listaClientes"];
            Clientes cliente = new Clientes();
            if (txtIdCliente.Text.Trim() != "")
            {
                cliente.Id_Cliente = Convert.ToInt16(txtIdCliente.Text.Trim());
            }
            cliente.Nombre = txtCliente.Text.Trim();

            bool encontrado = false;
            foreach (Clientes item in listaClientes)
            {
                if (item.Id_Cliente == cliente.Id_Cliente)
                {
                    txtIdCliente.Text = item.Id_Cliente.ToString();
                    txtCliente.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
                if (item.Nombre == cliente.Nombre)
                {
                    txtIdCliente.Text = item.Id_Cliente.ToString();
                    txtCliente.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
            }

            if (!encontrado)
            {
                txtIdCliente.Text = "";
                txtCliente.Text = "";
                #region dispararPopUp(hacePostBack)

                string scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
            <!--
                function mostrarCliente()
                {
                    var stringURL = 'BuscarCliente.aspx?pStation=0';
                    var oINPUTS = document.getElementsByTagName (""INPUT"");
                    for(var a=0;a<oINPUTS.length; a++)
                    {
                        //Validaciones para cuando el control fue arrastrado a un PopUP (Sin MasterPage)

                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtIdConcepto')
                        {
                            //alert('U1a: &IdConcepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Id_Concepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtConcepto')
                        {  
                            //alert('U2a: &Concepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Concepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                    }
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=450, width=550, left=100, top=100"");
                }
                mostrarCliente();
            //-->
            </script>
            ";

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
                #endregion
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Guardar
    public void Guardar()
    {
        try
        {
            BMVentas bmVentas = new BMVentas(Connection);
            Ventas venta = new Ventas();
            BMVentasDet bmVentasDet = new BMVentasDet(Connection);

            // Validacion Factura
            if (cboTalon.SelectedItem.Value != "0")
            {
                try
                {
                    Int32 iNumero = Convert.ToInt32(txtFactura.Text.Trim());
                }
                catch (Exception ex)
                {
                    string error = ex.Message.ToString();
                    txtFactura.Text = "";
                    lblMensaje.Text = "El Numero de Factura es Incorrecto.";
                    mpeMensaje.Show();
                    return;
                }
                bool ok = ControlFactura();
                if (!ok)
                {
                    return;
                }
            }

            venta = bmVentas.BMVentasGetNext();
            txtIdVenta.Text = venta.Id_Ventas.ToString();

            // datos para Cabecera de Ventas
            venta.Id_Ventas = Convert.ToInt16(txtIdVenta.Text.Trim());
            venta.Id_Cliente = Convert.ToInt16(txtIdCliente.Text.Trim());
            venta.Cliente = txtCliente.Text;
            Usuarios usuario = new Usuarios();
            usuario = (Usuarios)Session["UsuarioActual"];
            venta.Id_Usuario = usuario.Id_Usuario;
            if (txtFactura.Text != "")
            {
                venta.Prefijo = txtPrefijo.Text;
                venta.Factura = int.Parse(txtFactura.Text);
            }
            venta.Id_Estado = 1;
            venta.Estado = "Activo";
            venta.Fecha = Fecha.GetFecha();
            
            venta.CtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim()) + Convert.ToDecimal(txtCheques.Text.Trim()); 
            BMCajas bmCaja = new BMCajas(Connection);
            Cajas caja = new Cajas();
            caja.Id_Usuario = venta.Id_Usuario;
            caja = bmCaja.BMCajasAbiertaByUsuario(caja);
            venta.Id_Caja = caja.Id_Caja;
            venta.Obs = txtObs.Text;
            venta.Pago = Convert.ToDecimal(txtPago.Text.Trim());
            venta.IdVendedor = Convert.ToInt16(cboVendedores.SelectedItem.Value);
            if (chkProveedor.Checked)
            {
                venta.Proveedor = 1;
            }

            // Grabo Detalles
            List<VentasDet> listaVentasDet = new List<VentasDet>();
            listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            int item = 0;
            foreach (VentasDet ventaDet in listaVentasDet)
            {
                if (ventaDet.Monto != 0) 
                {
                    item++;
                    ventaDet.Item = item;
                    ventaDet.Id_Ventas = venta.Id_Ventas;
                    venta.Total += ventaDet.Monto;
                    venta.Kilos += ventaDet.Kilos;
                    bmVentasDet.BMVentasDetInsert(ventaDet);
                    if (Session["Remito"] == null)
                    {
                        ActualizaStock(ventaDet);
                    }
                }
            }

            // Grabo Cabecera Ventas
            if (cboTalon.SelectedItem.Value != "0")
            {
                Talonarios talonario = (Talonarios)Session["talonario"];
                venta.PFMes = talonario.Mes;
                venta.PFAnio = talonario.Anio;
            }

            if (venta.Proveedor == 1)
            {
                BMProveedores bmProveedor = new BMProveedores(Connection);
                Proveedores proveedor = new Proveedores();
                proveedor.Id_Proveedor = venta.Id_Cliente;
                proveedor = bmProveedor.BMProveedoresGetOne(proveedor);
                Session["Proveedor"] = proveedor;

            }
            else
            {
                BMClientes bmClientes = new BMClientes(Connection);
                Clientes cliente = new Clientes();
                cliente.Id_Cliente = venta.Id_Cliente;
                cliente = bmClientes.BMClientesGetOne(cliente);
                Session["Cliente"] = cliente;
                venta.sCuit = cliente.sCuit;
            }
            venta.Tipo = lblFormato.Text;
            venta.FCondVenta = txtCondVenta.Text;
            venta.FOrdenC = txtOrdenC.Text;
            venta.FOrdenT = txtOrdenT.Text;
            venta.FRemito = txtRemito.Text;

            bmVentas.BMVentasInsert(venta);
            Session["venta"] = venta;

            // Grabo Total de Cheques en Caja y en tabla Cheques ( cada item)
            Decimal dCheques = Convert.ToDecimal(txtCheques.Text.Trim());
            if (dCheques > 0)
            {
                caja.Cheques += dCheques;
                bmCaja.BMCajasUpdate(caja);
                BMCheques bmCheques = new BMCheques(Connection);
                int iItem = 0;
                foreach (Cheques  cheque in listaCheques)
                {
                    cheque.Id_Ventas = venta.Id_Ventas;
                    iItem++;
                    cheque.Item = iItem;
                    cheque.Sucursal = 1;
                    cheque.FechaEstado = venta.Fecha;
                    cheque.Id_Usuario = venta.Id_Usuario;
                    bmCheques.BMChequesInsert(cheque);
                }
            }

            // Grabo Factura
            if (venta.Factura > 0)
            {
                BMFacturas bmFactura = new BMFacturas(Connection);
                Facturas factura = new Facturas();
                factura.Id_Venta = int.Parse(venta.Id_Ventas.ToString());
                factura.Numero = venta.Factura;
                factura.Prefijo = txtPrefijo.Text;
                factura.Talonario = int.Parse(cboTalon.SelectedItem.Value);
                factura.Nombre = cboTalon.SelectedItem.Text;

                bmFactura.FacturasInsert(factura);
            }
            lblAccion.Text = "Venta Guardada";

            // Imputacion Cta. Cte.
            if (venta.CtaCte > 0)
            {
                if (venta.Proveedor == 1)
                {
                    BMProveedores bmProveedor = new BMProveedores(Connection);
                    Proveedores proveedor = (Proveedores)Session["Proveedor"];
                    Decimal dTemp = proveedor.Saldo;
                    proveedor.Saldo = dTemp + venta.CtaCte;
                    bmProveedor.BMProveedoresUpdateSaldo(proveedor);
                }
                else
                {
                    BMClientes bmClientes = new BMClientes(Connection);
                    Clientes cliente = (Clientes)Session["Cliente"];
                    Decimal dTemp = cliente.Saldo;
                    cliente.Saldo = dTemp + venta.CtaCte;
                    bmClientes.BMClientesUpdateSaldo(cliente);
                }
            }

            // Grabo Ingreso
            if (venta.Pago > 0)
            {
                BMIngresos bmIngresos = new BMIngresos(Connection);
                Ingresos ingreso = new Ingresos();
                ingreso = bmIngresos.BMIngresosGetNext();
                ingreso.Id_Venta = venta.Id_Ventas;
                ingreso.Id_Cliente = venta.Id_Cliente;
                ingreso.Concepto = "Venta Contado";
                ingreso.Fecha = Fecha.GetFecha();
                ingreso.Id_Caja = caja.Id_Caja;
                ingreso.Id_Concepto = 4;
                ingreso.Id_Usuario = venta.Id_Usuario;
                ingreso.Monto = venta.Pago;
                ingreso.Observaciones = "Venta Nro. " + venta.Id_Ventas;
                bmIngresos.BMIngresosInsert(ingreso);
            }

            if (Session["Remito"] != null)
            {
                // Cambio Estado de Remito por 2 = Facturado 
                Remitos remito = (Remitos)Session["Remito"];
                BMRemitos bmRemitos = new BMRemitos(Connection);
                remito.Id_Estado = 2;
                remito.Estado = "Facturado";
                remito.FechaCambio = venta.Fecha;
                remito.Id_Ventas = venta.Id_Ventas;
                remito.Id_UsuarioCambio = venta.Id_Usuario;
                bmRemitos.BMRemitosUpdateEstado(remito);
                Session["Remito"] = null;
            }

            btnNuevaVenta.Visible = true;
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;
            btnBuscarArticulo.Enabled = false;

            Session["Proveedor"] = null;
            Session["Cliente"] = null;
            gvCheques.Columns[7].Visible = false;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region NuevaVenta
    public void NuevaVenta()
    {
        try
        {          
            DateTime dtHoy = DateTime.Now.Date;
            string sFecha = dtHoy.ToString().Remove(11);
            Fecha.SetFecha(Convert.ToDateTime(sFecha));

            btnNuevaVenta.Visible = false;
            btnLimpiar.Visible = true;
            btnGuardar.Visible = true;
            trArticulo1.Visible = true;
            trArticulo2.Visible = true;
            btnBuscarCliente.Enabled = true;
            btnBuscarArticulo.Enabled = true;
            chkSS.Enabled = true;


            txtIdVenta.Text = "";
            txtIdCliente.Text = "";
            txtCliente.Text = "";
            txtSaldo.Text = "";
            txtFactura.ReadOnly = false;
            txtFactura.Text = "";
            Limpiar();
            txtSaldo.Text = "";
            lblAccion.Text = "Carga Nueva Venta";

            Session["Accion"] = 1;

            Session["listaTalonarios"] = null;
            Session["listaTasas"] = null;
            Session["dTasa"] = null;
            cboTalon.Items.Clear();
            cboTasas.Items.Clear();
            CargarTalonarios();
            CargarTasas();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Limpiar
    public void Limpiar()
    {
        try
        {
            listaVentasDet = new List<VentasDet>();
            ActualizarGrilla();
            listaCheques = new List<Cheques>();
            ActualizarGrillaCheques();
            gvCheques.Columns[7].Visible = true;
            txtPago.Text = "0";
            txtCtaCte.Text = "0";
            txtTotal.Text = "0";
            txtObs.Text = "";
            cboTalon.Enabled = true;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion
   
    #region CargarVenta
    public void CargarVenta()
    {
        try
        {
            Ventas venta = new Ventas();
            venta.Id_Ventas = Convert.ToInt32(Request.QueryString["Id_Ventas"].ToString());

            BMVentas bmVentas = new BMVentas(Connection);
            List<Ventas> listaVentas = new List<Ventas>();
            listaVentas = bmVentas.BMVentasSearch(venta, venta);
            Session["Venta"] = listaVentas[0];
            // si es Nota de Credigo redirecciona a la inferfaz NotaCred
            if (listaVentas[0].Total < 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("NotaCred.aspx?Id_Ventas=");
                sb.Append(listaVentas[0].Id_Ventas.ToString());
                sb.Append("&Accion=3");

                Response.Redirect(sb.ToString(), false);
            }
            txtIdVenta.Text = listaVentas[0].Id_Ventas.ToString();
            if (listaVentas[0].Proveedor == 1)
            {
                Proveedores proveedor = new Proveedores();
                BMProveedores bmProveedores = new BMProveedores(Connection);
                proveedor.Id_Proveedor = listaVentas[0].Id_Cliente;
                proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
                txtSaldo.Text = proveedor.Saldo.ToString();
            }
            else
            {
                Clientes cliente = new Clientes();
                BMClientes bmClientes = new BMClientes(Connection);
                cliente.Id_Cliente = listaVentas[0].Id_Cliente;
                cliente = bmClientes.BMClientesGetOne(cliente);
                txtSaldo.Text = cliente.Saldo.ToString();
            }
            txtIdCliente.Text = listaVentas[0].Id_Cliente.ToString();
            txtCliente.Text = listaVentas[0].Cliente;
            Fecha.SetFecha(listaVentas[0].Fecha);
            decimal dTemp = Convert.ToDecimal(listaVentas[0].Pago);
            dTemp = Math.Round(dTemp, 2);
            txtPago.Text = dTemp.ToString();
            dTemp = Convert.ToDecimal(listaVentas[0].CtaCte);
            dTemp = Math.Round(dTemp, 2);
            txtCtaCte.Text = dTemp.ToString();
            dTemp = Convert.ToDecimal(listaVentas[0].Total);
            dTemp = Math.Round(dTemp, 2);
            txtTotal.Text = dTemp.ToString();
            txtObs.Text = listaVentas[0].Obs;
            cboTalon.Enabled = false;
            if (listaVentas[0].PFAnio > 0)
            {
                tdFactura1.Visible = true;
                tdFactura2.Visible = true;
                trTasa.Visible = true;
                cboTalon.Visible = false;
                //cboTalon.SelectedIndex = 1;
                cboTasas.Visible = false;
                trTasa.Visible = false;
                txtFactura.Text = listaVentas[0].Factura.ToString();
                txtPrefijo.Text = listaVentas[0].Prefijo;
                txtFactura.ReadOnly = true;
            }
            lblFormato.Text = listaVentas[0].Tipo;
            txtCondVenta.Text = listaVentas[0].FCondVenta;
            txtOrdenC.Text = listaVentas[0].FOrdenC;
            txtOrdenT.Text = listaVentas[0].FOrdenT;
            txtRemito.Text = listaVentas[0].FRemito;
            BMVentasDet bmVentasDet = new BMVentasDet(Connection);
            List<VentasDet> listaVentasDet = new List<VentasDet>();
            VentasDet ventaDet = new VentasDet();
            ventaDet.Id_Ventas = listaVentas[0].Id_Ventas;

            listaVentasDet = bmVentasDet.BMVentasDetGetAll(ventaDet);
            Session["listaVentasDet"] = listaVentasDet;

            if (listaVentasDet[0].Id_Articulo == 0)
            {
                chkSS.Checked = true;
            }
            chkSS.Enabled = false;

            ActualizarGrilla();

            ActualizarTotalVenta();

            lblAccion.Text = "Ver Venta - Boton Anular = anula Venta y revierte saldos";
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;
            btnNuevaVenta.Visible = false;
            btnBuscarCliente.Visible = false;
            btnBuscarArticulo.Visible = false;
            txtPago.Attributes.Add("readonly", "readonly");
            txtCtaCte.Attributes.Add("readonly", "readonly");
            txtIdCliente.Attributes.Add("readonly", "readonly");
            btnAgregar.Enabled = false;
            Fecha.Attributes.Add("readonly", "readonly");
            txtObs.Attributes.Add("readonly", "readonly");
            if (listaVentas[0].Id_Estado != 1)
            {
                btnEliminar.Enabled = false;
            }
            trArticulo1.Visible = false;
            trArticulo2.Visible = false;

            if (txtCtaCte.Text == "0.00")
            {
                btnCobranza.Visible = false;
            }
            else
            {
                btnCobranza.Visible = true;
            }

            // Ver si tiene cobranzas
            List<Cobranzas> listaCobranzas = new List<Cobranzas>();
            Cobranzas cobranza = new Cobranzas();
            BMCobranzas bmCobranzas = new BMCobranzas(Connection);
            cobranza.Sucursal = 1; // venta.Sucursal;
            cobranza.Id_Ventas = venta.Id_Ventas;
            listaCobranzas = bmCobranzas.BMCobranzasGetAllByVenta(cobranza);
            if (listaCobranzas.Count > 0)
            {
                trCobranza1.Visible = true;
                trCobranza2.Visible = true;
                Session["listaCobranzas"] = listaCobranzas;
                gridDataBaundCobranzas();
            }

            // Ver si tiene Cheques
            BMCheques bmCheques = new BMCheques(Connection);
            Cheques cheque = new Cheques();
            cheque.Id_Ventas = venta.Id_Ventas;
            listaCheques = bmCheques.BMChequesGetAllByVenta(cheque);
            if (listaCheques.Count > 0)
            {
                Session["listaCheques"] = listaCheques;

                Decimal dTotalCheques = 0;
                foreach (Cheques item in listaCheques)
                {
                    if (item.IdEstado == 1 || item.IdEstado == 3) // 1=Pendiente  2=Imputado  3=Devuelto  4=Cancelado 
                    {
                        dTotalCheques += item.Monto;
                    }
                }
                txtCheques.Text = dTotalCheques.ToString();
                ActualizarGrillaCheques();
                Decimal dSaldo = listaVentas[0].CtaCte - dTotalCheques;
                txtCtaCte.Text = dSaldo.ToString();
            }
            trCheques2.Visible = false;
            gvCheques.Columns[7].Visible = false;

            // Setear Vendedor
            int index = 0;
            foreach (ListItem item in cboVendedores.Items)
            {
                if (listaVentas[0].IdVendedor.ToString() == item.Value)
                {
                    cboVendedores.SelectedIndex = index;
                }
                index++;
            }
            int iAccion = (int)Session["Accion"];
            if (iAccion == 3)
            {
                cboVendedores.Enabled = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizaStock
    protected void ActualizaStock(VentasDet ventaDet)
    {
        try
        {
            // Graba Movimiento de Stock
            BMMovStock bmMov = new BMMovStock(Connection);
            MovStock mov = new MovStock();
            mov.Id_Rubro = ventaDet.Id_Rubro;
            mov.Id_SubRubro = ventaDet.Id_SubRubro;
            mov.Id_Articulo = ventaDet.Id_Articulo;
            mov.Lote = ventaDet.Lote;
            mov = bmMov.BMMovStockGetNext(mov);
            mov.ALote = 0;
            mov.Fecha = Fecha.GetFecha();
            mov.Rubro = ventaDet.Rubro;
            mov.SubRubro = ventaDet.SubRubro;
            mov.Articulo = ventaDet.Articulo;
            mov.Id_Operacion = Convert.ToInt16(txtIdVenta.Text.Trim());
            mov.Id_Usuario = ventaDet.Id_Usuario;
            mov.Kilos = ventaDet.Kilos;
            mov.Operacion = 4; // 1: Egreso - 2: Ingreso - 3: Compra - 4: Venta
            mov.Saldo = ventaDet.Stock - ventaDet.Kilos;
            mov.Id_Usuario = ventaDet.Id_Usuario;
            bmMov.BMMovStockInsert(mov);

            // Actualiza Saldo Stock
            BMStock bmStock = new BMStock(Connection);
            Stock stock = new Stock();
            stock.Id_Rubro = ventaDet.Id_Rubro;
            stock.Rubro = ventaDet.Rubro;
            stock.Id_SubRubro = ventaDet.Id_SubRubro;
            stock.SubRubro = ventaDet.SubRubro;
            stock.Id_Articulo = ventaDet.Id_Articulo;
            stock.Lote = ventaDet.Lote;
            stock = bmStock.BMStockGetOne(stock);
            Decimal dStock = stock.Saldo;
            stock.Saldo = dStock - ventaDet.Kilos;
            bmStock.BMStockUpdate(stock);

            // Actualiza Saldo Lote
            if (stock.UsaLotes == 1)
            {
                BMLotes bmLotes = new BMLotes(Connection);
                bmLotes.BMLotesUpdateSaldo(ventaDet);
            }

            bmMov = null;
            mov = null;
            bmStock = null;
            stock = null;            
                
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region BuscarArticulo
    public void BuscarArticulo()
    {
        try
        {
            #region dispararPopUp(hacePostBack)
            Session["Estado"] = 1; // Para que devuelva solo articulos Activos
            string scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
                function mostrarArticulo()
                {
                    var stringURL = 'BuscarArticulo.aspx?pStation=0';
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=500, width=650, left=100, top=100"");
                }
                mostrarArticulo();
            </script>
            ";

            Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
            #endregion
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gridDataBaund
    protected void gridDataBaund()
    {
        try
        {
            gvVentasDet.DataSource = listaVentasDet;
            gvVentasDet.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gridDataBaundCobranzas
    protected void gridDataBaundCobranzas()
    {
        try
        {
            List<Cobranzas> listaCobranzas = (List<Cobranzas>)Session["listaCobranzas"];
            gvCobranzas.DataSource = listaCobranzas;
            gvCobranzas.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gridDataBaundCheques
    protected void gridDataBaundCheques()
    {
        try
        {
            gvCheques.DataSource = listaCheques;
            gvCheques.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarTotalVenta
    protected void ActualizarTotalVenta()
    {
        try
        {
            Decimal dTotal = 0;
            foreach (VentasDet item in listaVentasDet)
            {
                dTotal += item.Total;
            }
            txtTotal.Text = dTotal.ToString();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarTotalCheques
    protected void ActualizarTotalCheques()
    {
        try
        {
            Decimal dTotal = 0;
            foreach (Cheques item in listaCheques)
            {
                dTotal += item.Monto;
            }
            txtCheques.Text = dTotal.ToString();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region LimpiarItem
    protected void LimpiarItem()
    {
        try
        {
            txtRubro.Value = "";
            txtSubRubro.Value = "";
            txtIdArticulo.Text = "";
            txtArticulo.Text = "";
            txtCodBarra.Text = "";
            txtStock.Text = "";
            txtCantidad.Text = "0";
            txtPrecio.Text = "0";
            txtTotalItem.Text = "";
            txtLote.Text = "0";
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region LimpiarCheque
    protected void LimpiarCheque()
    {
        try
        {
            txtCodBanco.Text = "";
            txtBanco.Text = "";
            txtNumero.Text = "";
            txtMontoCheque.Text = "0";
            FechaCh.SetFecha(null);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarGrilla
    protected void ActualizarGrilla()
    {
        try
        {
            Session["listaVentasDet"] = listaVentasDet;
            gridDataBaund();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarGrillaCheques
    protected void ActualizarGrillaCheques()
    {
        try
        {
            Session["listaCheques"] = listaCheques;
            gridDataBaundCheques();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregarItem
    protected void AgregarItem()
    {
        try
        {
            chkSS.Enabled = false;

            // Hidrata nuevo item y agregar a la lista de items
            SubRubros subRubro = (SubRubros)Session["subRubro"];
            VentasDet nuevoItem = new VentasDet();
            nuevoItem.Articulo = txtArticulo.Text;
            nuevoItem.Id_Articulo = Convert.ToInt16(txtIdArticulo.Text);

            nuevoItem.Id_Rubro = subRubro.Id_Rubro;
            nuevoItem.Rubro = subRubro.Rubro;
            nuevoItem.Id_SubRubro = subRubro.Id_SubRubro;
            nuevoItem.SubRubro = subRubro.SubRubro;

            //nuevoItem.Id_Ventas = Convert.ToInt64(txtIdVenta.Text);     se actualizara al Grabar
            listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            int iItems = listaVentasDet.Count;
            iItems++;
            nuevoItem.Item = iItems;
            nuevoItem.Kilos = Convert.ToDecimal(txtCantidad.Text);
            nuevoItem.Lote = txtLote.Text;
            nuevoItem.Monto = Convert.ToDecimal(txtTotalItem.Text);
            nuevoItem.Precio = Convert.ToDecimal(txtPrecio.Text);
            Decimal dStock = Convert.ToDecimal(txtStock.Text);
            nuevoItem.Stock = dStock - nuevoItem.Kilos;
            if (int.Parse(cboTalon.SelectedItem.Value) > 0 && lblFormato.Text == "A")
            {
                if (nuevoItem.Monto > 0)
                {
                    nuevoItem.TTasa = Convert.ToInt16(cboTasas.SelectedItem.Value);
                    decimal dTasa = decimal.Parse(txtTasa.Text);
                    nuevoItem.Tasa = Decimal.Round(dTasa, 3);
                    decimal dImpuesto = nuevoItem.Monto * dTasa;
                    nuevoItem.Impuesto = Decimal.Round(dImpuesto, 2);
                }
            }
            decimal dTotal = nuevoItem.Monto + nuevoItem.Impuesto;
            nuevoItem.Total = Decimal.Round(dTotal,2);
            listaVentasDet.Add(nuevoItem);
            Session["listaVentasDet"] = listaVentasDet;

            ActualizarTotalVenta();

            LimpiarItem();

            ActualizarGrilla();

            cboTalon.Enabled = false;

            if (Session["Remito"] != null)
            {
                ControlItemsRemito();
            }

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregarCheque
    protected void AgregarCheque()
    {
        try
        {
            // Hidrata nuevo cheque y agregar a la lista de cheques
            Cheques cheque = new Cheques();
            cheque.CodBanco = Convert.ToInt16(txtCodBanco.Text.Trim());
            cheque.Banco = txtBanco.Text.Trim();
            cheque.FechaCh = FechaCh.GetFecha();
            cheque.Numero = txtNumero.Text;
            cheque.Monto = Convert.ToDecimal(txtMontoCheque.Text.Trim());
            cheque.IdEstado = 1;
            cheque.Estado = "Pendiente";
            
            //cheque.Id_Ventas = Convert.ToInt64(txtIdVenta.Text);     se actualizara al Grabar
            listaCheques = (List<Cheques>)Session["listaCheques"];
            int iItems = listaCheques.Count;
            iItems++;
            cheque.Item = iItems;
            
            listaCheques.Add(cheque);
            Session["listaCheques"] = listaCheques;

            ActualizarTotalCheques();
            LimpiarCheque();
            ActualizarGrillaCheques();

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Eliminar
    public void Eliminar()
    {
        try
        {
            // Elimina Venta y revierte saldos de stock, caja y cliente
            BMVentas bmVentas = new BMVentas(Connection);
            Ventas venta = new Ventas();
            venta = (Ventas)Session["Venta"];
            venta.Obs = "Anulada: " + DateTime.Now.ToString();
            venta.Id_Estado = 2;
            venta.Estado = "Anulado";
            bmVentas.BMVentasUpdate(venta);

            if (txtCtaCte.Text != "")
            {
                Decimal dCtaCte = Convert.ToDecimal(txtCtaCte.Text);
                if (dCtaCte > 0)
                {
                    BMClientes bmClientes = new BMClientes(Connection);
                    Clientes cliente = new Clientes();
                    cliente.Id_Cliente = Convert.ToInt64(txtIdCliente.Text);
                    cliente = bmClientes.BMClientesGetOne(cliente);
                    Decimal dSaldo = dCtaCte;
                    cliente.Saldo = cliente.Saldo - dSaldo;
                    bmClientes.BMClientesUpdateSaldo(cliente);
                }
            }

            if (txtPago.Text != "")
            {
                Decimal dPago = Convert.ToDecimal(txtPago.Text);
                if (dPago > 0)
                {
                    BMIngresos bmIngresos = new BMIngresos(Connection);
                    Ingresos ingreso = new Ingresos();
                    ingreso = bmIngresos.BMIngresosGetNext();
                    BMCajas bmCaja = new BMCajas(Connection);
                    Cajas caja = new Cajas();
                    Usuarios usuario = new Usuarios();
                    usuario = (Usuarios)Session["UsuarioActual"];
                    caja.Id_Usuario = usuario.Id_Usuario;
                    caja = bmCaja.BMCajasAbiertaByUsuario(caja);
                    ingreso.Concepto = "Venta anulada";
                    ingreso.Id_Venta = venta.Id_Ventas;
                    ingreso.Fecha = Fecha.GetFecha();
                    ingreso.Id_Caja = caja.Id_Caja;
                    ingreso.Id_Cliente = Convert.ToInt64(txtIdCliente.Text);
                    ingreso.Id_Concepto = 4;
                    ingreso.Id_Usuario = usuario.Id_Usuario;
                    ingreso.Monto = dPago * (-1);
                    ingreso.Observaciones = "Venta Anulada Nro. " + txtIdVenta.Text;
                    bmIngresos.BMIngresosInsert(ingreso);
                }
            }

            listaVentasDet = (List<VentasDet>)Session["listaVentasDet"];
            foreach (VentasDet item in listaVentasDet)
            {
                if (item.Kilos > 0)
                {
                    item.Kilos = item.Kilos * (-1);
                    ActualizaStock(item);
                }
            }

            // Elimina Cheques
            BMCheques bmCheques = new BMCheques(Connection);
            Cheques cheque = new Cheques();
            cheque.Id_Ventas = venta.Id_Ventas;
            listaCheques = bmCheques.BMChequesGetAllByVenta(cheque);
            if (listaCheques.Count > 0)
            {
                bmCheques.BMChequesDelete(cheque);
            }

            lblAccion.Text = "Venta Anulada";
            btnEliminar.Enabled = false;
        }
        catch (Exception ex) { throw ex; }
    }
    #endregion

    #region CargarTalonarios
    protected void CargarTalonarios()
    {
        try
        {
            cboTalon.Enabled = true;
            ListItem item = new ListItem();
            item.Value = "0";
            item.Text = "Sin Factura";
            cboTalon.Items.Add(item);
            tdFactura1.Visible = false;
            tdFactura2.Visible = false;
            trTasa.Visible = false;

            listaTalonarios = new List<Talonarios>();
            if (Session["listaTalonarios"] != null)
            {
                listaTalonarios = (List<Talonarios>)Session["listaTalonarios"];
            }
            else
            {
                BMTalonarios bmTalonarios = new BMTalonarios(Connection);
                listaTalonarios = bmTalonarios.BMTalonariosGetAll();
                Session["listaTalonarios"] = listaTalonarios;
            }

            foreach (Talonarios itemTalonario in listaTalonarios)
            {
                if (itemTalonario.Habilitado)
                {
                    if (itemTalonario.Id > 100)
                    {
                        break;
                    }
                    ListItem liItem = new ListItem();
                    liItem.Value = itemTalonario.Id.ToString();
                    liItem.Text = itemTalonario.Nombre;
                    cboTalon.Items.Add(liItem);
                }
            }            
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarTasas
    protected void CargarTasas()
    {
        try
        {
            listaTasas = new List<Impuestos>();
           
            BMImpuestos bmImpuestos = new BMImpuestos(Connection);
            Impuestos pImpuesto = new Impuestos();
            pImpuesto.Tipo = "A";
            listaTasas = bmImpuestos.BMImpuestosGetAll(pImpuesto);
            Session["listaTasas"] = listaTasas;

            foreach (Impuestos itemImpuesto in listaTasas)
            {
                if (itemImpuesto.Nombre.Length > 1)
                {
                    ListItem liItem = new ListItem();
                    liItem.Value = itemImpuesto.Id.ToString();
                    liItem.Text = itemImpuesto.Nombre;
                    cboTasas.Items.Add(liItem);
                }
            }
            if (listaTasas.Count > 0)
            {
                txtTasa.Text = listaTasas[0].Tasa.ToString();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ControlFactura
    protected bool ControlFactura()
    {
        bool bFactura = true;
        try
        {
            Talonarios talonario = (Talonarios)Session["talonario"];
            Int32 iNumero = Convert.ToInt32(txtFactura.Text.Trim());

            if (iNumero > talonario.A)
            {
                lblMensaje.Text = "Numero de Factura fuera del Rango del Talonario.";
                bFactura = false;
            }
            if (iNumero < talonario.De)
            {
                lblMensaje.Text = "Numero de Factura fuera del Rango del Talonario.";
                bFactura = false;
            }
            if (!bFactura)
            {
                mpeMensaje.Show();
                return bFactura;
            }
            BMFacturas bmFacturas = new BMFacturas(Connection);
            Facturas pFactura = new Facturas();
            Facturas factura = new Facturas();
            pFactura.Numero = iNumero;
            factura = bmFacturas.FacturasGetOne(pFactura);
            if (factura.Numero == iNumero)
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("Factura ya cargada en venta: ");
                sb.Append(factura.Id_Venta.ToString());
                lblMensaje.Text = sb.ToString();

                bFactura = false;
                mpeMensaje.Show();
                return bFactura;
            }

            // Control de secuencia
            if (talonario.Control)
            {
                if (iNumero > talonario.De)
                {
                    pFactura.Numero = iNumero - 1;
                    factura = new Facturas();
                    factura = bmFacturas.FacturasGetOne(pFactura);
                    if (factura.Numero != pFactura.Numero)
                    {
                        lblMensaje.Text = "Factura anterior NO cargada.";
                        bFactura = false;
                    }
                }
            }

            if (!bFactura)
            {
                mpeMensaje.Show();
                return bFactura;
            }

            // Control Periodo Fiscal
            if (talonario.Anio > 0)
            {
                int iAnio = Fecha.GetFecha().Year;
                int iMes = Fecha.GetFecha().Month;
                if (iAnio == talonario.Anio && iMes == talonario.Mes)
                {
                    bFactura = true;
                }
                else
                {
                    lblMensaje.Text = "Fecha no corresponde al Periodo Fiscal habilitado para este talonario.";
                    mpeMensaje.Show();
                    bFactura = false;
                }
            }
            return bFactura;
        }
        catch (Exception ex) { ErrorUI(ex); }
        return bFactura;
    }
    #endregion

    #region AgregaCodigoBarras
    protected void AgregaCodigoBarras()
    {
        try
        {

            //codigo de barras, ej.: 123456 esta en la base con lote 7  ej 1234567 ( tiene lagroLote 6 )
            List<Stock> listaStock = new List<Stock>();
            BMStock bmStock = new BMStock(Connection);
            Stock stock = new Stock();
            Lotes lote = new Lotes();
            List<Lotes> listaLotes = new List<Lotes>();

            // Separar codigo de barra del numero de lote ( se toma como minimo 4 caracteres para articulo)
            string sArticulo = "";
            if (txtCodBarra.Text.Trim().Length > 3)
            {
                if (Connection == "c073")
                {
                    if (txtCodBarra.Text.Trim().Length > 9)
                    {
                        sArticulo = txtCodBarra.Text.Trim().Remove(9);
                    }
                    else
                    {
                        sArticulo = txtCodBarra.Text.Trim();
                    }
                }
                else
                {

                    sArticulo = txtCodBarra.Text.Trim();
                }

                
            }
            else
            {
                lblMensaje.Text = "Error en Cod. de Barras ( el mínimo es de 4 caracteres)";
                mpeMensaje.Show();
                return;
            }

            stock.CodigoBarra = sArticulo;
            listaStock = bmStock.BMStockSearchCodBarr(stock);

            if (listaStock.Count == 1)
            {
                stock = listaStock[0];

                if (stock.UsaLotes == 1)
                {
                    lote.Id_Rubro = stock.Id_Rubro;
                    lote.Id_SubRubro = stock.Id_SubRubro;
                    lote.Id_Articulo = stock.Id_Articulo;
                    if (txtCodBarra.Text.Trim().Length > stock.LargoArt)
                    {
                        if (txtCodBarra.Text.Trim().Remove(0, stock.LargoArt) != "0")
                        {
                            lote.Lote = txtCodBarra.Text.Trim().Remove(0, stock.LargoArt);
                        }
                        else
                        {
                            lblMensaje.Text = "Nro. de Lote Incorrecto.";
                            mpeMensaje.Show();
                            return;
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "Falta Nro. de Lote.";
                        mpeMensaje.Show();
                        return;
                    }
                    lote.Estado = 1;
                    BMLotes bmLotes = new BMLotes(Connection);
                    listaLotes = bmLotes.BMLotesSearch(lote);
                    if (listaLotes.Count == 0)
                    {
                        lblMensaje.Text = "Lote No disponible.";
                        mpeMensaje.Show();
                        return;
                    }
                    if (listaLotes.Count == 1)
                    {
                        txtLote.Text = listaLotes[0].Lote.ToString();
                        listaStock = bmStock.BMStockSearch(stock);
                        if (listaStock.Count > 0)
                        {
                            // valida lote
                            if (stock.Lote != "0")
                            {
                                lote = new Lotes();
                                lote.Id_Rubro = listaStock[0].Id_Rubro;
                                lote.Id_SubRubro = listaStock[0].Id_SubRubro;
                                lote.Id_Articulo = listaStock[0].Id_Articulo;
                                lote.Lote = stock.Lote;
                                bmLotes = new BMLotes(Connection);
                                lote = bmLotes.BMLotesGetOne(lote);
                                if (lote.Id_Articulo == 0)
                                {
                                    lblMensaje.Text = "Lote Inexistente.";
                                    mpeMensaje.Show();
                                    return;
                                }
                                if (lote.Estado == 0)
                                {
                                    lblMensaje.Text = "Lote Cerrado.";
                                    mpeMensaje.Show();
                                    return;
                                }
                            }
                        }
                    }
                }

                txtRubro.Value = listaStock[0].Id_Rubro.ToString();
                txtSubRubro.Value = listaStock[0].Id_SubRubro.ToString();
                txtIdArticulo.Text = listaStock[0].Id_Articulo.ToString();
                txtArticulo.Text = listaStock[0].Articulo;
                txtStock.Text = listaStock[0].Saldo.ToString();
                //txtPrecio.Text = listaStock[0].Precio.ToString().Replace(".", ",");
                if (txtPrecio.Text == "0")
                {
                    txtPrecio.Text = listaStock[0].Precio.ToString();
                }
                txtCantidad.Text = txtCantBarra.Text;
                if (txtCantidad.Text != "" && txtPrecio.Text != "")
                {
                    Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                    if (dCantidad > 0)
                    {
                        Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                        Decimal dItem = dCantidad * dPrecio;
                        txtTotalItem.Text = dItem.ToString();
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Cantidad y Precio.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }

                SubRubros subRubo = new SubRubros();
                subRubo.Id_Rubro = listaStock[0].Id_Rubro;
                subRubo.Rubro = listaStock[0].Rubro;
                subRubo.Id_SubRubro = listaStock[0].Id_SubRubro;
                subRubo.SubRubro = listaStock[0].SubRubro;
                Session["subRubro"] = subRubo;

                AgregarItem();
            }
            else
            {
                lblMensaje.Text = "Hay mas de una posibilidad de elección: deberá Buscar Artículo.";
                mpeMensaje.Show();
            }

            listaStock = null;
            bmStock = null;
            stock = null;
            txtCodBarra.Focus();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region registrarScript
    protected void registrarScript()
    {
        // dispararPopUp(hacePostBack)
        StringBuilder scriptSession = new StringBuilder("<script language='javascript' type='text/javascript'>");
        scriptSession.Append("function mostrarReporte()");
        scriptSession.Append("{");
        scriptSession.Append("var stringURL = '../Informes/Factura.aspx';");
        scriptSession.Append("var opciones='toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes';");
        scriptSession.Append("var newWin = window.open(stringURL, 'PopUp" + DateTime.Now.Ticks.ToString() + "', opciones);");
        scriptSession.Append("}");
        scriptSession.Append("mostrarReporte();");
        scriptSession.Append("</script>");

        Page.ClientScript.RegisterStartupScript(this.GetType(), "Reporte" + Session["iReporte"].ToString(), scriptSession.ToString());
    }
    #endregion

    #region CargarRemito
    public void CargarRemito()
    {
        try
        {

            lblAccion.Text = "Carga Nueva Venta en base a Remito";
            Remitos remito = (Remitos)Session["Remito"];

            
            Clientes cliente = new Clientes();
            BMClientes bmClientes = new BMClientes(Connection);
            cliente.Id_Cliente = remito.Id_Cliente;
            cliente = bmClientes.BMClientesGetOne(cliente);
            txtSaldo.Text = cliente.Saldo.ToString();
            txtIdCliente.Text = remito.Id_Cliente.ToString();
            txtCliente.Text = cliente.Nombre;
            trCodBarra.Visible = false;

            hdnForma.Value = remito.Tipo;

            // Buscar Proximo Articulo
            Stock articulo = ProximoArticulo();

            // Cargar Articulo
            CargarArticulo(articulo);
            txtCantidad.Enabled = false;
 
            List<VentasDet> listaVentasDet = new List<VentasDet>();
            Session["listaVentasDet"] = listaVentasDet;

            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;
            btnNuevaVenta.Visible = false;
            btnBuscarCliente.Visible = false;
            btnBuscarArticulo.Visible = false;

            txtIdCliente.Attributes.Add("readonly", "readonly");

            btnEliminar.Enabled = false;
            btnCobranza.Visible = false;
            Session["Accion"] = 1;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ProximoArticulo  para facturar en base a Remito
    protected Stock ProximoArticulo()
    {
        Stock articulo = new Stock();
        try
        {
            List<RemitosDet> listaRemitosDet = (List<RemitosDet>)Session["listaRemitosDet"];
            articulo.Id_Rubro = listaRemitosDet[0].Id_Rubro;
            articulo.Id_SubRubro = listaRemitosDet[0].Id_SubRubro;
            articulo.Id_Articulo = listaRemitosDet[0].Id_Articulo;

            if (hdnForma.Value == "L")
            {
                articulo.Articulo = listaRemitosDet[0].Articulo;
            }
            else
            {
                
                BMStock bmStock = new BMStock(Connection);
                articulo = bmStock.BMStockGetOne(articulo);
                articulo.Lote = listaRemitosDet[0].Lote;
            }

            decimal dTemp = listaRemitosDet[0].Kilos;
            dTemp = Math.Round(dTemp, 2);
            txtCantidad.Text = dTemp.ToString();
        }
        catch (Exception ex) { ErrorUI(ex); }
        return articulo;
    }
    #endregion

    #region CargarArticulo
    protected void CargarArticulo(Stock articulo)
    {
        try
        {
            SubRubros subRubro = new SubRubros();
            subRubro.Id_Rubro = articulo.Id_Rubro;
            subRubro.Id_SubRubro = articulo.Id_SubRubro;
            BMSubRubros bmSubRubros = new BMSubRubros(Connection);
            subRubro = bmSubRubros.BMSubRubrosSearch(subRubro)[0];
            Session["subRubro"] = subRubro;
            txtRubro.Value = subRubro.Id_Rubro.ToString();
            txtSubRubro.Value = subRubro.Id_SubRubro.ToString();
            txtIdArticulo.Text = articulo.Id_Articulo.ToString();
            txtArticulo.Text = articulo.Articulo;
            decimal dTemp = articulo.Saldo;
            dTemp = Math.Round(dTemp, 2);
            txtStock.Text = dTemp.ToString();
            txtLote.Text = articulo.Lote.ToString();
            dTemp = articulo.Precio;
            dTemp = Math.Round(dTemp, 2);
            txtPrecio.Text = dTemp.ToString();
            

            Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
            Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
            Decimal dItem = dCantidad * dPrecio;
            dItem = Math.Round(dItem, 2);
            txtTotalItem.Text = dItem.ToString();          
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ControlItemsRemito
    protected void ControlItemsRemito()
    {
        try
        {
            List<RemitosDet> listaRemitosDet = (List<RemitosDet>)Session["listaRemitosDet"];
            if (listaRemitosDet.Count > 0)
            {
                listaRemitosDet.Remove(listaRemitosDet[0]);
                Session["listaRemitosDet"] = listaRemitosDet;
                if (listaRemitosDet.Count > 0)
                {
                    // Buscar Proximo Articulo
                    Stock articulo = ProximoArticulo();

                    // Cargar Articulo
                    CargarArticulo(articulo);
                }
                else
                {
                    trArticulo1.Visible = false;
                    trArticulo2.Visible = false;
                    btnGuardar.Visible = true;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ControlTalonario
    protected void ControlTalonario()
    {
        try 
        {
            if (txtIdCliente.Text != "")
            {
                btnBuscarCliente.Enabled = false;
                Clientes cliente = new Clientes();
                cliente.Id_Cliente = Convert.ToInt16(txtIdCliente.Text.Trim());
                BMClientes bmClientes = new BMClientes(Connection);
                cliente = bmClientes.BMClientesGetOne(cliente);
                Session["Cliente"] = cliente;
                if (cliente.TipoFac != "")
                {
                    tdFactura1.Visible = true;
                    tdFactura2.Visible = true;
                    trTasa.Visible = true;

                    listaTalonarios = (List<Talonarios>)Session["listaTalonarios"];
                    int i = cboTalon.SelectedIndex;
                    if (listaTalonarios.Count > 0)
                    {
                        foreach (Talonarios item in listaTalonarios)
                        {
                            if (Convert.ToInt16(cboTalon.SelectedValue) == item.Id)
                            {
                                if (item.Tipo == cliente.TipoFac)
                                {
                                    Session["talonario"] = item;
                                    txtPrefijo.Text = item.Prefijo;
                                    lblFormato.Text = item.Tipo;
                                    Facturas factura = new Facturas();
                                    // factura.Sucursal = item.Sucursal;
                                    factura.Sucursal = 1;
                                    factura.Talonario = item.Id;
                                    BMFacturas bmFacturas = new BMFacturas(Connection);
                                    txtFactura.Text = bmFacturas.FacturasProximoNumero(factura).ToString();
                                    cboTalon.SelectedIndex = i;
                                    cboTalon.Enabled = false;
                                    break;
                                }
                            }
                            //i++;
                        }
                    }
                    if (lblFormato.Text == "")
                    {
                        tdFactura1.Visible = false;
                        tdFactura2.Visible = false;
                        trTasa.Visible = false;
                        btnAgregar.Enabled = false;
                        btnGuardar.Enabled = false;
                        lblMensaje.Text = "No se encuentra Tipo de Talonario Habilitado para este Cliente.";
                        mpeMensaje.Show();
                        return;
                    }
                    if (lblFormato.Text == "B")
                    {
                        trTasa.Visible = false;
                    }
                    if (lblFormato.Text == "C")
                    {
                        trTasa.Visible = false;
                    }
                    if (lblFormato.Text == "E")
                    {
                        trTasa.Visible = false;
                    }
                    txtCodBarra.Focus();
                    return;
                }
            }
            else
            {
                cboTalon.SelectedIndex = 0;
                lblMensaje.Text = "Primero debe seleccionar un Cliente.";
                mpeMensaje.Show();
                return;
            }

            tdFactura1.Visible = true;
            tdFactura2.Visible = true;
            trTasa.Visible = true;
            if (cboTalon.SelectedItem.Value != "0")
            {
                tdFactura1.Visible = true;
                tdFactura2.Visible = true;
                trTasa.Visible = true;

                int iTalonario = Convert.ToInt16(cboTalon.SelectedItem.Value);

                listaTalonarios = (List<Talonarios>)Session["listaTalonarios"];
                foreach (Talonarios item in listaTalonarios)
                {
                    if (item.Id == iTalonario)
                    {
                        Session["talonario"] = item;
                        txtPrefijo.Text = item.Prefijo;
                        lblFormato.Text = item.Tipo;
                        Facturas factura = new Facturas();
                        // factura.Sucursal = item.Sucursal;
                        factura.Sucursal = 1;
                        factura.Talonario = item.Id;
                        BMFacturas bmFacturas = new BMFacturas(Connection);
                        txtFactura.Text = bmFacturas.FacturasProximoNumero(factura).ToString();
                        break;
                    }
                }
                if (lblFormato.Text == "B")
                {
                    trTasa.Visible = false;
                }
                if (lblFormato.Text == "E")
                {
                    trTasa.Visible = false;
                }
                if (lblFormato.Text == "C")
                {
                    trTasa.Visible = false;
                }
            }
            else
            {
                tdFactura1.Visible = false;
                tdFactura2.Visible = false;
                trTasa.Visible = false;
            }
            txtCodBarra.Focus();
        }
        catch (Exception ex)
        {
            //  grabar log  de errores
            string sErrTalonario = ex.ToString();

            tdFactura1.Visible = false;
            tdFactura2.Visible = false;
            trTasa.Visible = false;
            btnAgregar.Enabled = false;
            btnGuardar.Enabled = false;
            lblMensaje.Text = "No hay Talonario Habilitado para este Cliente.";
            mpeMensaje.Show();
            return;
        }
    }
    #endregion

    #region CargarComboVendedores
    private void CargarComboVendedores()
    {
        try
        {
            ListItem item0 = new ListItem();
            item0.Value = "0";
            item0.Text = "Sin Vendedor";
            cboVendedores.Items.Add(item0);

            List<Empleados> listaEmpleados = new List<Empleados>();
            BMEmpleados bmEmpleados = new BMEmpleados(Connection);

            listaEmpleados = bmEmpleados.BMEmpleadosGetAll();
            int index = 1;
            foreach (Empleados empleado in listaEmpleados)
            {
                if (empleado.Tarea == "Vendedor" || empleado.Tarea == "VENDEDOR")
                {
                    ListItem item = new ListItem();
                    item.Value = empleado.Id_Empleado.ToString();
                    item.Text = empleado.Nombre;
                    cboVendedores.Items.Add(item);
                    index++;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region VerificaCaja
    public void VerificaCaja()
    {
        try
        {
            if (oCaja == null)
            {
                Cajas oCajatmp = new Cajas();
                oCaja = oCajatmp;
            }
            oCaja.Id_Usuario = UsuarioActual().Id_Usuario;
            BMCajas bmCajas = new BMCajas(Connection);
            oCaja = bmCajas.BMCajasAbiertaByUsuario(oCaja);
            if (oCaja.Id_Caja > 0)
            {
                TraeCaja(oCaja);
            }
            else
            {
                lblAccion.Text = "No hay caja abierta";
                btnBuscarCliente.Enabled = false;
                btnBuscarArticulo.Enabled = false;
                btnAgregar.Enabled = false;
                btnGuardar.Enabled = false;
                btnLimpiar.Enabled = false;
                btnAgregaCheque.Enabled = false;
                return;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region TraeCaja
    public void TraeCaja(Cajas oCaja)
    {
        try
        {
            /// Carga lista items de Caja
            ItemCaja itemCaja = new ItemCaja();
            List<ItemCaja> listaCaja = new List<ItemCaja>();
            BMItemCaja bmItemCaja = new BMItemCaja(Connection);
            itemCaja.Id_Caja = oCaja.Id_Caja;
            listaCaja = bmItemCaja.BMlistaCaja(itemCaja);
            Session["listaCaja"] = listaCaja;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
}
